<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // myfilter /myMap / myForEach  :循环不同形式
        // add(1,2,3)-->add(1)(2)(3);
        // 命令式编程 ：注重过程 强调 ”如何做“？？
        // for(var i=0;i<5;i++){
        //     console.log(i);
        // }
        // 声明式编程： 强调结果 ”做什么?“ 忽略如何做？
        // parseInt
        // var arr = [true,2,5,false];
        // 关注如何循环的过程
        // for(var i=0;i<arr.length;i++){
        //     console.log(i,arr[i]);
        // }
        // arr.forEach(function (item) {
        //     console.log(item)
        // })


        // 把函数当成参数来传递 ：回调 callback 也是高阶函数的一种
        // function myFilter(callbackFn) {
        //     callbackFn();
        // }
        // myFilter(function() {})

        // var arr = [1, 3, 5, 7, 2];
        // var res = arr.filter(function (item) {
        //     console.log(item);
        //     return item>4;
        // })
        // console.log(res);
        // 高阶函数：把函数作为输入或者输出的函数 被称为高阶函数
        // 注意：把函数当成参数传入
        // function  myFilter(arr,cb) {
        //     // 收集回调函数执行是true的结果
        //     var newArr = [];
        //     var count = 0;
        //     for(var i=0;i<arr.length;i++){
        //         if(cb(arr[i])){
        //             newArr[count] = arr[i];
        //             count++ 
        //         }
        //     }
        //     console.log(newArr);
        //     return newArr;
        // }
        // myFilter(arr,function(item){
        //     // console.log(123);
        //     return item>4;
        // })

        // 把函数当成参数输出；add(1,2,3)-->myAdd(1)(2)(3);

    //     function add(a,b,c) {
    //         return a + b + c;
    //     }
    //   console.log(  add(1,2,3));

    // 缓存
        function myAdd(a) {
            console.log("myAdd")
            return function (b) {
                console.log("返还的函数11")
                return function (c) {
                    console.log("返还的函数222")
                    return a + b + c
                }
            };
        }

        // var res =  myAdd()  //  --->myadd的返还结果
        // var fn =   res();
        // fn();
        // curry：咖喱 柯里化
       console.log( myAdd(1)(2)(3));
    </script>
</body>

</html>